package com.itheima.aspect;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

//1、定义类、定义方法、抽取公共代码
@Slf4j
//@Aspect//告知spring框架，标识当前类是一个抽取公共代码的类
//@Component//交给spring管理
public class RecordTimeAspect {

    //2、定义方法：抽取公共的代码
    @Around("execution(* com.itheima.service.impl.EmpLogServiceImpl.*(..))")//3.定位需要耗时统计的目标方法
    public Object recordTime(ProceedingJoinPoint joinPoint) throws Throwable{
        //获取方法执行前的时间
        LocalDateTime startTime = LocalDateTime.now();

        //执行方法
        Object result = joinPoint.proceed();

        //获取方法执行后的时间
        LocalDateTime endTime = LocalDateTime.now();

        //计算方法执行耗时
        long time = endTime.getNano() - startTime.getNano();

        //打印耗时
        log.info("AOP统计{}方法的耗时：{}",joinPoint.getSignature().getName(),time);

        //返回结果
        return result;
    }
}
